home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fritz: All Fritz
/
All Fritz.zip
/
All Fritz
/
FILES
/
TEXTTORS
/
NYEDIT21.LZH
/
MACROS.ARC
/
DRAW
< prev
next >
Wrap
Text File
|
1988-05-02
|
5KB
|
231 lines
/*
DRAW
This macro provides the user with a simple line-drawing facility using the
ASCII line drawing characters. When you press <ALT D>, you are prompted for
a choice of selecting the type of line drawing chars or going into drawing
mode. You can select from three different styles of drawing characters -
ASCII, single line or double line.
Once you are in drawing mode, you can use the cursor keypad to draw your
box characters (keys 1,2,3,4,6,7,8,9). Pressing <ESC> will exit drawing
mode.
*/
#define UP 200
#define DOWN 208
#define LEFT 203
#define RIGHT 205
#define PGDN 209
#define PGUP 201
#define HOME 199
#define END 207
#define RETURN 10
#define ESC 27
#define ALT_D 160
int reached_eof;
string tl;
string t;
string tr;
string r;
string br;
string b;
string bl;
string l;
init()
{
tl = chr(218);
t = chr(196);
tr = chr(191);
r = chr(179);
br = chr(217);
b = chr(196);
bl = chr(192);
l = chr(179);
assign_key("draw_cmd", ALT_D);
}
draw_cmd()
{
message("Draw cmd: D)raw, T)ype_box");
key = get_tty_char();
if (key == 'd' || key == 'D')
draw();
else if (key == 't' || key == 'T')
type_box();
}
draw()
{
int key;
setprompt(2);
key = 0;
while (key != RETURN && key != ESC)
{
message(sprintf(" Draw Mode: Use numeric keypad to draw...ESC to quit col: %d", currcol()));
key = get_tty_char();
if (key >= HOME && key <= PGDN)
{
if (key == UP)
{
insert(t);
if (! is_eol())
delchar();
}
else if (key == DOWN)
{
insert(b);
if (! is_eol())
delchar();
left();
left();
}
else if (key == LEFT)
{
insert(l);
if (! is_eol())
delchar();
left();
up();
}
else if (key == RIGHT)
{
insert(r);
if (! is_eol())
delchar();
left();
if (!down()) appnd_line();
}
else if (key == PGDN)
{
insert(br);
if (! is_eol())
delchar();
left();
left();
}
else if (key == PGUP)
{
insert(tr);
if (! is_eol())
delchar();
left();
if (!down()) appnd_line();
}
else if (key == HOME)
{
insert(tl);
if (! is_eol())
delchar();
}
else if (key == END)
{
insert(bl);
if (! is_eol())
delchar();
left();
up();
}
}
}
setprompt(0);
return(key);
}
/* posn_cursor() - this internal macro lets the user position cursor */
posn_cursor(msg)
string msg;
{
int key,
col;
key = 0;
while (key != RETURN && key != ESC)
{
message(sprintf(strcat(msg," col: %d line: %d"),
currcol(), currlinenum()));
key = get_tty_char();
if (key >= HOME && key <= PGDN)
{
if (key == UP)
up();
else if (key == DOWN)
{
if (!down())
append_line();
}
else if (key == LEFT)
left();
else if (key == RIGHT)
right();
else if (key == PGDN)
nextscreen();
else if (key == PGUP)
prevscreen();
else if (key == HOME)
gobol();
else if (key == END)
goeol();
}
}
return(key);
}
type_box()
{
message("Choose box type: A)scii, D)ouble_line, S)ingle_line");
key = get_tty_char();
if (key == 'a' || key == 'A')
{
tl = chr(45);
t = chr(45);
tr = chr(45);
r = chr(124);
br = chr(45);
b = chr(45);
bl = chr(45);
l = chr(124);
}
else if (key == 'd' || key == 'D')
{
tl = chr(201);
t = chr(205);
tr = chr(187);
r = chr(186);
br = chr(188);
b = chr(205);
bl = chr(200);
l = chr(186);
}
else if (key == 's' || key == 'S')
{
tl = chr(218);
t = chr(196);
tr = chr(191);
r = chr(179);
br = chr(217);
b = chr(196);
bl = chr(192);
l = chr(179);
}
}
appnd_line()
{
col = currcol();
goeol();
insert("\n");
setcol(col);
}